裁剪分析 Sample详情

最后更新时间:2020年12月11日

裁剪分析,指按照用户指定的空间范围,形成裁剪框的边界(边界可以是任意多边形),按照该裁剪框对地图图层进行框内或框外的切取,即保留框内或框外的图形及相关属性信息,并把保留的图形及属性内容写到一个新的数据集中,尤其是对面域数据的裁剪操作,裁剪后还需重新组织图形数据的拓扑关系后再予以保存。

裁剪分析包括两种类型:内裁和外裁。内裁是裁剪结果保留为裁剪框边界之内的图形及相关属性;外裁是裁剪结果保留为裁剪框边界之外的图形及相关属性。

在此,以针对几何要素的裁剪分析为例。

主要通过API程序包com.zondy.mapgis.geometry下的GeometryOperator类接口实现:

接口 说明
GeometryOperator.clipGeometryByGeometry() 区裁剪几何
GeometryOperator.clipGeometryByRect() 矩形裁剪几何
GeometryOperator.clipDotsByRect() 矩形裁剪

具体实现方法如下:

1

构建裁剪区

进行裁剪分析,首先需要构建裁剪要素和被裁剪要素。例如,区裁剪几何功能,需要的裁剪要素为区要素。裁剪要素和被裁剪要素的获取、构造方法同缓冲区分析中缓冲对象的获取方式一样,有三种方式,可参考对应内容。

        //裁剪多边形点坐标(地图坐标)
        Dot dot1 = new Dot(12720512.5, 3558371.2);
        Dot dot2 = new Dot(12720358.6, 3561554.1);
        Dot dot3 = new Dot(12723017.1, 3561615.5);
        Dot dot4 = new Dot(12723074.1, 3559360.3);
        Dot[] dots = {dot1, dot2, dot3, dot4, dot1};
        //创建并初始化裁剪多边形图形
        GraphicPolygon graphicPolygon = new GraphicPolygon();
        graphicPolygon.appendPoints(dots);
        graphicPolygon.setColor(addColor);
        graphicPolygon.setBorderlineWidth(5);
        graphicPolygon.setBorderlineColor(Color.argb(255, 51, 51, 51));
        //显示裁剪多边形图形
        graphicsOverlayData.addGraphic(graphicPolygon);
        //将裁剪多边形图形转换为几何对象进行分析
        Geometry geometry = Graphic.toGeometry(graphicPolygon);
        geoPolygon = (GeoPolygon) geometry;

2

获取被裁剪要素

获取被裁剪要素,在实际应用中常采用要素查询方式获取。

     // 获取要素
     Feature feature = featureList.get(i);
     //获取要素的几何信息(默认查询区要素)
     Geometry geometry = feature.getGeometry();

3

裁剪分析

准备工作完成后,构造空间分析对象,然后调用clip方法进行裁剪分析,可以选择两种方法进行内裁剪或者外裁剪。裁剪之后的几何对象可以转换为Graphic进行绘制,可参考缓冲分析部分。

        // 执行裁剪分析-区裁剪几何(被裁剪几何、裁剪区、裁剪类型-内裁/外裁、容差)
        Geometry geometryClip = GeometryOperator.clipGeometryByGeometry(geometry, geoPolygon, ClipType.INCLIP, mTolerance);

        //将分析结果要素转为几何图形
        List graphics = Graphic.toGraphicsFromGeometry(geometryClip);

        //绘制裁剪分析结果图形
        for (int i = 0; i < graphics.size(); i++) {
            //设置裁剪分析结果图形填充色
            graphics.get(i).setColor(resultColor);
            //显示裁剪分析结果图形
            graphicsOverlayResult.addGraphic(graphics.get(i));
        }

重要说明:在进行裁剪分析时,SDK提供的接口有一个容差值参数,需要根据具体数据设置合适的容差值。一般可设置为0.0001;对于经纬度数据建议先调用setTolerance()接口使用0.000000001作为容差值。这样设置较小的容差值是为了避免将比较小的地图要素过滤处理掉了,保证裁剪分析结果的正确性。

内裁剪、外裁剪实现效果分别如下图所示:

内裁.png 外裁.png